home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / c / tkalgebra / lib / macierz.h < prev    next >
Text File  |  1999-12-06  |  2KB  |  94 lines

  1. #ifndef NULL
  2. #define NULL 0
  3. #endif
  4. #ifndef _MACIERZ_H_
  5. #define _MACIERZ_H_
  6. #include <stdio.h>
  7.  
  8. #define BEZ_BLEDU 0
  9. #define BRAK_PAMIECI 1
  10. #define BLEDNE_OPERACJE 2
  11. #define BLEDNE_DANE 4
  12. #define ZLE_UWARUNKOWANIE 8
  13. #define POZA_ZAKRESEM 16
  14.  
  15. class Algebra//obiekt wirtualny, prototyp Macierzy i wektorów
  16. {  protected:
  17.     char Pamiec;//1-dynamiczna,0-statyczna
  18.     public:
  19.     double *X;//dane
  20.     public:
  21.     unsigned int Ile_Kolumn;
  22.     unsigned int Ile_Wierszy;
  23.     char Bledy;//Flaga Bledu, flagi zdefiniowane powy¿ej
  24.     virtual void Print(FILE *)=NULL;
  25. };
  26. class Macierz;
  27. class Wektor : public Algebra
  28. {  protected:
  29.     unsigned int Skok;
  30.     public:
  31.     friend class Macierz;
  32.     Wektor();
  33.     Wektor(unsigned int);
  34.     void Transponuj();
  35.     Wektor(Wektor &);
  36.     Wektor &operator=(const Wektor &);
  37.     double operator*(Wektor &);
  38.     Wektor operator*(double);
  39.     double Norma();
  40.     double Norma2();
  41.     void Print(FILE *p=stdout);
  42.     Wektor operator+(Wektor &);
  43.     double &operator[](unsigned long int a)
  44.     {  if(a<Ile_Kolumn+Ile_Wierszy)
  45.             return X[a*Skok];
  46.         else
  47.         {  Bledy=POZA_ZAKRESEM;
  48.             return X[0];
  49.         }
  50.             
  51.     }
  52.     ~Wektor();
  53. };
  54.  
  55. typedef Wektor *TabWsk;
  56.  
  57. Wektor *Rozwiazanie(Macierz &A,Wektor &b);
  58.  
  59. class Macierz : public Algebra
  60. {  protected:
  61.     unsigned int *I;//informacja o zamianach wierszy
  62.     int ZamienWiersze(unsigned int,unsigned int);
  63.     int Zamien(unsigned int);
  64.     public:
  65.     friend Wektor *Rozwiazanie(Macierz &A,Wektor &b);
  66.     TabWsk *Kolumny;
  67.     TabWsk *Wiersze;
  68.     Macierz();
  69.     Macierz(unsigned int, unsigned int);// Ile_Wierszy,ile_Kolumn
  70.     Macierz(const Macierz &);
  71.     //Macierz &operator=(const Macierz &);
  72.     void Print(FILE *p=stdout);
  73.     Wektor &operator[](unsigned int a)
  74.     {  if(a<Ile_Wierszy)
  75.             return *(Wiersze[a]);
  76.         else
  77.         {  Bledy=POZA_ZAKRESEM;
  78.             return *(Wiersze[Ile_Kolumn-1]);
  79.         }   
  80.     }
  81.      ~Macierz();
  82.     Macierz operator*(Macierz &);
  83.     Wektor operator*(Wektor &);
  84.     double War_Wlasna();
  85.     int GaussToLU();
  86.     Macierz *Odwrotna();
  87.     Macierz *Transponuj();
  88.     Macierz &operator=(const Macierz &);
  89. };
  90.  
  91.  
  92. #endif
  93.  
  94.